//package com.lac.component.aop;
//
///**
// * @author xiaokuixiao
// * date2025/7/7 17:09
// */
//
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.JoinPoint;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.*;
//import org.springframework.context.annotation.EnableAspectJAutoProxy;
//import org.springframework.stereotype.Component;
//
//
//
//@Aspect //用来定义一个切面类。
//@Component //将这个切面类交给 Spring 容器管理。
//@EnableAspectJAutoProxy
//@Slf4j
//public class LoggingAspect {
//    @Around("execution(* com.lac.component.controller.*.*(..))")
//    public Object logBefore(ProceedingJoinPoint joinPoint) {
//        // 1. 在目标方法执行前的逻辑
//        long start = System.currentTimeMillis();  // 记录方法开始时间
//        Object result = null;
//        try {
//            // 2. 执行目标方法本身
//            result = joinPoint.proceed();
//        } catch (Throwable e) {
//            // 3. 目标方法抛出异常时的逻辑
//            System.err.println("Exception in method " + joinPoint.getSignature().getName() + ": " + e.getMessage());
//        } finally {
//            // 4. 无论目标方法成功执行还是抛出异常，都会执行的逻辑 (类似 finally 块)
//            log.info("After method {}", joinPoint.getSignature().getName());
//            long executionTime = System.currentTimeMillis() - start;  // 计算方法执行时间
//            log.info("方法 {} 执行时间: {} 毫秒", joinPoint.getSignature(), executionTime);
//        }
//        // 5. 返回目标方法的返回值
//        return result;
//    }
//
//    @Before("execution(* com.lac.component.controller.*.*(..))")
//    public void logBeforeMethod(JoinPoint joinPoint) {
//        log.info("执行方法之前：{}", joinPoint.getSignature().getName());
//    }
//
//    @After("execution(*  com.lac.component.controller.*.*(..))")
//    public void logAfterMethod(JoinPoint joinPoint) {
//        log.info("方法执行结束：{}", joinPoint.getSignature().getName());
//    }
//
//    @AfterReturning(pointcut = "execution(* com.lac.component.controller.*.*(..))", returning = "result")
//    public void logAfterReturningMethod(JoinPoint joinPoint, Object result) {
//        log.info("方法返回值：{}", result);
//    }
//
//    @AfterThrowing(pointcut = "execution(* com.lac.component.controller.*.*(..))", throwing = "error")
//    public void logAfterThrowingMethod(JoinPoint joinPoint, Throwable error) {
//        log.info("方法抛出异常：{}", error);
//        if(error instanceof Exception) {
//            log.info("异常类型：{}", error.getClass().getName());
//            throw new RuntimeException(error);
//        }
//    }
//
//}
